home *** CD-ROM | disk | FTP | other *** search
/ Mac Mania 1 / MacMania 1.toast / Games / Mech Zone / Sample Robots / IterBot < prev    next >
Text File  |  1991-09-07  |  3KB  |  109 lines

  1. ` IterBot Series 1
  2. ` Copyright 1991 Calvin Hass
  3.  
  4. ` Name:             Iteration Robot One
  5. ` Mobility:         Immobile
  6. ` Degree Accuracy:  1
  7. ` Processor Speed:  17
  8. ` Comments:         Very effective against most stationary robots and
  9. `                   corner hogs such as Kelly.  It will track most
  10. `                   moving robots as well.
  11.  
  12. ` NB:  Processor speed is measured by the maximum number of aim
  13. `      refinements that are necessary in order to locate the other
  14. `      robot.  17 is the fastest possible in Integer mathematics.
  15.  
  16. ` *** Initialize Robot ***
  17.    Equip 6 0 0 0 1 125            `6 Lasers, Turbo Unit
  18.    SetShields 1 1 1 1 1 1 1 1     `All sides covered
  19.    TurboOn                        `Prepare for quick escape
  20.    LET Right = 1
  21.    LET Left = 0-1
  22.    LET Offset = 0
  23.    LET MaxLevel = 7
  24.    Dimension Arc(7)
  25.    LET Arc(1) = 360               `Here is the aiming algorithm
  26.    LET Arc(2) = 180               `in number of degrees arc for
  27.    LET Arc(3) = 90                `each aiming level.  Level 1
  28.    LET Arc(4) = 30                `should always be 360 degrees
  29.    LET Arc(5) = 6
  30.    LET Arc(6) = 2
  31.    LET Arc(7) = 1
  32.  
  33. ` *** Main Loop ***
  34. 100 If Fuel <=10 Then GOTO 5000   `If out of fuel, freeze
  35. 110 LET OldDamage = Damage        `Update the old damage level
  36. 120 GOSUB 1000                    `Seek & Destroy other robots
  37. 999 GOTO 100                      `Continue main loop
  38.  
  39. ` Seek & Destroy is a modular algorithm I designed to be very flexible
  40. ` and fast.  It has been optimized to a certain extent, but still
  41. ` reasonably readable.  One should be able to substitute any aiming
  42. ` algorithm in the Arc array above.  The standard method uses
  43. ` refinement for aiming routines.
  44.  
  45. ` *** Seek & Destroy ***
  46. 1000 LET Level = 2                            `Start with level 2
  47. 1010 LET PrevLevel = Level - 1
  48.      LET Segments = Arc(PrevLevel) / Arc(Level)
  49.      FOR Scan = 1 To Segments
  50.       GOSUB 4000                              `Check for damage
  51.       LET Temp = Arc(Level) + Offset          `Add both turns together
  52.       LET Offset = 0
  53.       Swivel Temp
  54.       LET ScanAngle = Arc(Level) / 2
  55.       ObjectScan ScanAngle
  56.       If Range > 0 Then GOTO 1030
  57.      NEXT
  58. 1020 LET Level = Level - 1
  59.      LET BackTrack = 0 - Arc(Level)
  60.      Swivel BackTrack
  61.      GOTO 1010
  62. 1030 LET Level = Level + 1
  63.      If Level > MaxLevel Then GOTO 1040
  64.      LET HalfArc = Arc(Level) * 15
  65.      LET Temp = 0-HalfArc
  66.      LET Offset = Temp / 10
  67.      GOTO 1010
  68. 1040 Zap 3                                     `Zap three times
  69.      GOSUB 4000
  70.      Zap 3
  71.      GOSUB 4000
  72.      Zap 3
  73.      GOSUB 4000
  74.      ObjectScan 0
  75.      If Range > 0 Then GOTO 1040
  76.      GOTO 1020
  77.  
  78. 4000 LET NewDamage = Damage - OldDamage       `Check to see how much
  79.      If NewDamage > 100 Then GOSUB 6000       `new damage there is
  80.      RETURN
  81.  
  82. 5000 SetShields 1 2 3 4 4 3 2 1     `Stagnant State - Out of Fuel
  83. 5010 GOTO 5010                      `Shields up and stay
  84.  
  85. 6000 LET OldDamage = Damage
  86. 6010 If YCoOrd > 10 Then GOTO 6100  `Quick Escape Up
  87. 6020 If XCoOrd >= 38 Then GOTO 6200 `Escape Left
  88. 6030 If XCoOrd < 38 Then GOTO 6300  `Escape Right
  89. 6100 EngineOn
  90.      Wait 4
  91.      EngineOff
  92.      RETURN
  93. 6200 Turn Left
  94.      Turn Left
  95.      EngineOn
  96.      Wait 4
  97.      EngineOff
  98.      Turn Right
  99.      Turn Right
  100.      RETURN
  101. 6300 Turn Right
  102.      Turn Right
  103.      EngineOn
  104.      Wait 4
  105.      EngineOff
  106.      Turn Left
  107.      Turn Left
  108.      RETURN
  109.